﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Entity;

namespace DAL.Persistencia
{
    public class TarifCategoriaDAL
    {

        private NewTierraEntities Con;

        public TarifCategoriaDAL()
        {
            Con = new NewTierraEntities();
        }

        public List<Tarif_Categoria> ListarTodos()
        {
            try
            {

                return Con.Tarif_Categoria.OrderBy(s => s.Tarif_categoria_nome).ToList();

            }
            catch
            {
                throw;
            }
        }

        public List<Tarif_Categoria> ListarTodos(string nome)
        {
            try
            {

                if (nome.Equals(""))
                {
                    return Con.Tarif_Categoria.OrderBy(c => c.Tarif_categoria_nome).ToList();
                }
                else
                {
                    return Con.Tarif_Categoria.Where(t => t.Tarif_categoria_nome.Contains(nome)).OrderBy(o => o.Tarif_categoria_nome).ToList();
                }

            }
            catch
            {
                throw;
            }
        }

        public object ListarTodos(int IdSupplier)
        {
            try
            {

                return (from tcg in Con.Tarif_Categoria
                        join smt in Con.S_Mercado_Tarifa on tcg.Tarif_categoria_id equals smt.Tarif_categoria_id
                        join smp in Con.S_Mercado_Periodo on smt.S_merc_periodo_id equals smp.S_merc_periodo_id
                        where smp.S_id == IdSupplier
                        select new
                        {
                            tcg.Tarif_categoria_id,
                            tcg.Tarif_categoria_nome
                        }).Distinct().ToList();

            }
            catch 
            {
                
                throw;
            }
        }

        public bool VerificaExistente(string nome)
        {
            try
            {

                return Con.Tarif_Categoria.Where(t => t.Tarif_categoria_nome.Equals(nome)).Count() != 0;

            }
            catch
            {
                throw;
            }
        }

        public Tarif_Categoria ObterPorNome(string nome)
        {
            try
            {

                return Con.Tarif_Categoria.Where(t => t.Tarif_categoria_nome.Equals(nome)).Single();

            }
            catch
            {
                throw;
            }
        }

        public object ListarTodosJaCadastrados(int IdPeriodo)
        {
            try
            {
                var query = (from tc in Con.Tarif_Categoria
                             join mt in Con.S_Mercado_Tarifa on tc.Tarif_categoria_id equals mt.Tarif_categoria_id
                             where mt.S_merc_periodo_id == IdPeriodo
                             select new
                             {
                                 tc.Tarif_categoria_nome,
                                 tc.Tarif_categoria_id

                             }).Distinct().ToList();

                return query;

            }
            catch
            {
                throw;
            }
        }

        public void Salvar(Tarif_Categoria c)
        {
            try
            {

                Con.AddToTarif_Categoria(c);
                Con.SaveChanges();
            }
            catch
            {
                throw;
            }
        }

        public Tarif_Categoria ObterPorId(int IdCategoria)
        {
            try
            {

                return Con.Tarif_Categoria.Where(d => d.Tarif_categoria_id == IdCategoria).SingleOrDefault();
            }
            catch
            {
                throw;
            }
        }

        public void Excluir(Tarif_Categoria c)
        {
            try
            {

                Con.DeleteObject(c);
                Con.SaveChanges();
            }
            catch
            {
                throw;
            }
        }

        public void Atualizar(Tarif_Categoria novo)
        {
            try
            {
                Tarif_Categoria antigo = ObterPorId(novo.Tarif_categoria_id);

                antigo.Tarif_categoria_nome = novo.Tarif_categoria_nome;

                Con.SaveChanges();
            }
            catch 
            {                
                throw;
            }
        }

    }
}
